// 用 vector 数组存树
// #include <iostream>
// #include <queue>
// #include <vector>

// using namespace std;

// const int N = 1e5 + 10;

// int n;
// vector<int> edges[N]; // 存树
// bool st[N]; // 标记哪些节点已经访问过了

// void bfs()
// {
//     queue<int> q;
//     q.push(1);
//     st[1] = true;

//     while(q.size())
//     {
//         int u = q.front(); q.pop();
//         cout << u << " ";

//         for(auto v : edges[u])
//         {
//             if(!st[v])
//             {
//                 q.push(v);
//                 st[v] = true;
//             }
//         }
//     }
// }

// int main()
// {
//     // 建树
//     cin >> n;
//     for(int i = 1; i < n; i++)
//     {
//         int a, b; cin >> a >> b;
//         edges[a].push_back(b);
//         edges[b].push_back(a);
//     }

//     bfs();

//     return 0;
// }


// 用链式前向星存储树
#include <iostream>
#include <queue>

using namespace std;

const int N = 1e5 + 10;

int n;
int h[N], e[N * 2], ne[N * 2], id;
bool st[N];

void add(int a, int b)
{
    id++;
    e[id] = b;
    ne[id] = h[a];
    h[a] = id;
}

void bfs()
{
    queue<int> q;
    q.push(1);
    st[1] = true;

    while(q.size())
    {
        int u = q.front(); q.pop();
        cout << u << " ";

        for(int i = h[u]; i; i = ne[i])
        {
            int v = e[i];
            if(!st[v])
            {
                q.push(v);
                st[v] = true;
            }
        }
    }
}

int main()
{
    cin >> n;
    for(int i = 1; i < n; i++)
    {
        int a, b; cin >> a >> b;
        add(a, b); add(b, a);
    }

    bfs();

    return 0;
}